# -*- coding: utf-8 -*-
"""
MetasoCreator 功能演示启动脚本
功能：启动后端服务并打开演示页面
作者：东篱馆主
创建时间：2025-01-19
修改时间：2025-01-19
"""

import os
import sys
import webbrowser
import time
import subprocess
import threading
from pathlib import Path

def check_dependencies():
    """检查依赖包是否已安装"""
    # 包名到导入名的映射
    package_mapping = {
        'flask': 'flask',
        'flask-cors': 'flask_cors',
        'flask-restx': 'flask_restx',
        'pymongo': 'pymongo',
        'redis': 'redis',
        'requests': 'requests',
        'python-dotenv': 'dotenv',
        'loguru': 'loguru',
        'marshmallow': 'marshmallow'
    }
    
    missing_packages = []
    for package, import_name in package_mapping.items():
        try:
            __import__(import_name)
        except ImportError:
            missing_packages.append(package)
    
    if missing_packages:
        print("❌ 缺少以下依赖包:")
        for package in missing_packages:
            print(f"   - {package}")
        print("\n请运行以下命令安装依赖:")
        print(f"pip install {' '.join(missing_packages)} -i https://pypi.tuna.tsinghua.edu.cn/simple")
        return False
    
    print("✅ 所有依赖包已安装")
    return True

def create_env_file():
    """创建环境配置文件"""
    env_file = Path('.env')
    if not env_file.exists():
        print("📝 创建环境配置文件 .env")
        env_content = """# MetasoCreator 环境配置
FLASK_ENV=development
FLASK_HOST=127.0.0.1
FLASK_PORT=5000

# 秘塔AI API配置 (可选，用于搜索功能)
METASO_API_KEY=your_api_key_here
METASO_API_BASE_URL=https://metaso.cn/api/v1

# 数据库配置
MONGODB_HOST=localhost
MONGODB_PORT=27017
MONGODB_DB=MetasoCreator_dev

# Redis配置
REDIS_HOST=localhost
REDIS_PORT=6379
REDIS_DB=1
"""
        with open(env_file, 'w', encoding='utf-8') as f:
            f.write(env_content)
        print("✅ 环境配置文件已创建，请根据需要修改配置")
    else:
        print("✅ 环境配置文件已存在")

def start_backend():
    """启动后端服务"""
    print("🚀 启动 MetasoCreator 后端服务...")
    
    # 设置环境变量
    os.environ['FLASK_ENV'] = 'development'
    os.environ['FLASK_HOST'] = '127.0.0.1'
    os.environ['FLASK_PORT'] = '5000'
    
    try:
        # 启动Flask应用
        from run import app
        app.run(
            host='127.0.0.1',
            port=5000,
            debug=True,
            threaded=True
        )
    except Exception as e:
        print(f"❌ 启动后端服务失败: {e}")
        return False
    
    return True

def open_demo_page():
    """打开演示页面"""
    time.sleep(3)  # 等待服务启动
    
    demo_url = "http://127.0.0.1:5000/static/demo.html"
    print(f"🌐 打开演示页面: {demo_url}")
    
    try:
        webbrowser.open(demo_url)
        print("✅ 演示页面已在新浏览器窗口中打开")
    except Exception as e:
        print(f"❌ 无法自动打开浏览器: {e}")
        print(f"请手动在浏览器中访问: {demo_url}")

def main():
    """主函数"""
    print("=" * 60)
    print("🚀 MetasoCreator 功能演示启动器")
    print("=" * 60)
    
    # 检查当前目录
    if not Path('run.py').exists():
        print("❌ 请在 backend 目录下运行此脚本")
        sys.exit(1)
    
    # 检查依赖
    if not check_dependencies():
        sys.exit(1)
    
    # 创建环境配置
    create_env_file()
    
    print("\n📋 功能演示说明:")
    print("1. 🔍 智能搜索: 体验秘塔AI搜索功能")
    print("2. 📝 内容管理: 创建、编辑、删除内容")
    print("3. ⚙️ 系统监控: 检查系统健康状态")
    print("\n💡 提示: 首次使用搜索功能需要配置 METASO_API_KEY")
    
    print("\n" + "=" * 60)
    
    # 在新线程中打开演示页面
    demo_thread = threading.Thread(target=open_demo_page)
    demo_thread.daemon = True
    demo_thread.start()
    
    # 启动后端服务
    start_backend()

if __name__ == '__main__':
    main() 